class Dog:
    def __del__(self):
        print("over")


dog1 = Dog()
dog2 = dog1
del dog1
print("del dog1")
del dog2
print("end")

""" 
在 del dog2 注释了之后，显示:
del dog1
end
over

在加上 del dog2 之后，显示:
del dog1
over
end

__del__ 的调用，是针对这个实例的所有引用都没有之后才调用
这里，dog1 和 dog2 都指向这个事例
在 del dog1 之后，如果不知道 del dog2，则 __del__ 只有在程序所有完成
python runtime 自动 del dog2 之后 __init__ 才执行。所以 over 在最后
"""
